package com.heatup.apt.api.service.impl;

import com.baomidou.framework.service.impl.SuperServiceImpl;
import com.baomidou.mybatisplus.plugins.Page;
import com.heatup.apt.api.service.CompanyStaffService;
import com.heatup.apt.api.service.UserService;
import com.heatup.apt.common.dao.CompanyStaffMapper;
import com.heatup.apt.common.dao.OrderInfoMapper;
import com.heatup.apt.common.dao.user.UserInfoMapper;
import com.heatup.apt.model.company.CompanyStaff;
import com.heatup.apt.model.order.OrderCompanyDetail;
import com.heatup.apt.model.user.UserInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by blank on 2017/1/16.
 */
@Service
public class CompanyStaffServiceImpl extends SuperServiceImpl<CompanyStaffMapper, CompanyStaff> implements CompanyStaffService {

    @Autowired
    CompanyStaffMapper companyStaffMapper;

    @Autowired
    UserService userService;

    @Autowired
    UserInfoMapper userInfoMapper;

    @Autowired
    OrderInfoMapper orderInfoMapper;

    /**
     * 绑定企业
     *
     * @param companyStaff 企业员工
     * @return true 绑定成功/ false 绑定失败
     */
    @Override
    public Map<String, Object> bandingCompany(CompanyStaff companyStaff, UserInfo companyStaffUser) {

        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("success", false);
        if (companyStaff == null || companyStaff.getCompanyId() == null || StringUtils.isBlank(companyStaff.getMobile())) {

            resultMap.put("msg", "员工手机号为空或者企业ID不正确");
            return resultMap;
        }
        //查询该绑定手机号是否是该企业下的员工手机号
        companyStaff.setStatus(0);
        CompanyStaff companyStaffDB = companyStaffMapper.selectOne(companyStaff);
        if (companyStaffDB == null) {

            resultMap.put("msg", "该手机不在该企业员工列表中,请确认手机号正确或先联系管理人员添加员工信息到企业员工列表后再试");
            return resultMap;
        } else {
            resultMap.put("companyStaff", companyStaffDB);
        }
        //更新手机号到用户信息表
        companyStaffUser.setMobile(companyStaff.getMobile());
       // userInfoMapper.updateByPrimaryKeySelective(companyStaffUser);
        userInfoMapper.updateSelectiveById(companyStaffUser);

        //绑定用户到企业员工中
        companyStaffDB.setUserId(companyStaffUser.getId());
        int result = companyStaffMapper.updateSelectiveById(companyStaffDB);

        if (result > 0) {
            resultMap.put("success", true);
            resultMap.put("msg", "绑定成功!");

        } else {
            resultMap.put("msg", "绑定失败! 手机号未能成");
        }
        return resultMap;
    }


    /**
     * 查询用户是否有绑定企业
     *
     * @param openId 用户openId
     * @return true 已绑定/false 未绑定
     */
    @Override
    public boolean isIfBindingCompany(String openId) {

        CompanyStaff companyStaffQuery = new CompanyStaff();
        UserInfo userInfo = userService.getUserInfoByOpenId(openId);
        if (userInfo != null && StringUtils.isNotBlank(userInfo.getMobile())) {
            companyStaffQuery.setUserId(userInfo.getId());
            companyStaffQuery.setStatus(0);
            companyStaffQuery = companyStaffMapper.selectOne(companyStaffQuery);
            if (companyStaffQuery == null)
                return false;
            return true;
        }
        return false;
    }

    /**
     * 查询个人的企业储值账户 消费记录
     *
     * @param pageIndex 页码
     * @param pageSize 页面大小
     * @param userId 企业员工ID
     * @return 企业储值消费记录
     */
    @Override
    public Map<String, Object> companyValuedOrderList(Integer pageIndex, Integer pageSize, Integer userId) {

        CompanyStaff companyStaff = companyStaffMapper.selectCompanyPaymentDetailByUserId(userId);
        Map<String, Object> map = new HashMap<>();
        if (companyStaff != null) {
            Page<OrderCompanyDetail> page = new Page<>(pageIndex, pageSize);
            map.put("companyStaffId", companyStaff.getId());
            page.setRecords(orderInfoMapper.queryCompanyStaffOrderList(page, map));
            map.put("count", page.getTotal());
            map.put("list", page.getRecords());
        }

        return map;
    }

    /**
     * 查询企业员工对应余额及企业员工详情
     *
     * @param userId 用户Id
     * @return 企业员工对应余额及企业员工详情
     */
    @Override
    public CompanyStaff selectCompanyPaymentDetailByUserId(Integer userId) {
        return companyStaffMapper.selectCompanyPaymentDetailByUserId(userId);
    }
}
